#pragma once
#include "TcpServer.h"
#include "EventLoop.h"
#include "Connection.h"
#include "ThreadPool.h"

/*
  EchoServer类: 回显服务器
*/

class EchoServer
{
private:
    TcpServer tcpServer_;
    ThreadPool threadPool_;   //工作线程池
public:
    EchoServer(const std::string& ip, const uint16_t port, int subThreadNum = 3, int workThreadNum = 5);
    ~EchoServer();

    void Start();   //启动服务
    void Stop();    //停止服务

    void Handle_New_Connection(spConnection conn);          //处理新客户端连接请求
    void Handle_Close_Connection(spConnection conn);          //关闭客户端的连接，在TcpServer类中回调此函数
    void Handle_Error_Connection(spConnection conn);          //客户端的连接错误，在TcpServer类中回调此函数
    void Handle_On_Message(spConnection conn, std::string& message);    //处理客户端的请求报文，在TcpServer中回调该函数
    void Handle_Send_Complete(spConnection conn);              //数据发送完成的函数，在TcpServer类中回调此函数
    void Handle_Epoll_TimeOut(EventLoop* loop);               //epoll_wait()超时，在TcpServer类中回调此函数

    void OnMessage(spConnection conn, std::string& message);   //处理客户端请求的业务函数
};